package SpringFramework.Java配置.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import SpringFramework.Java配置.service.FunctionService;
import SpringFramework.Java配置.service.UseFunctionService;

// @Configuration声明当前类是一个配置类，这意味着这个类里可能有0个或者多个@Bean注解。
@Configuration
// 此处没有使用包扫描@ComponentScan，因为所有Bean在此类中定义了。
public class JavaConfig {
	// 使用@Bean注解声明当前方法FunctionService返回一个Bean，Bean的名称是方法名。
	@Bean
	public FunctionService functionService() {
		return new FunctionService();
	}
	
//	@Bean
//	public UseFunctionService useFunctionService() {
//		UseFunctionService useFunctionService = new UseFunctionService();
//		// 注入FunctionService的Bean时候可以直接调用functionService()。
//		useFunctionService.setFunctionService(functionService());
//		return useFunctionService;
//	}
	
	
	// 这是另外一种注入方式
    // 直接将FunctionService作为参数给useFunctionService()，这是Spring容器提供的极好的功能。
	// 在Spring容器中，只要容器中存在某个Bean，就可以在另外一个Bean的声明方法的参数中写入。
	@Bean
	public UseFunctionService useFunctionService(FunctionService functionService) {
		UseFunctionService useFunctionService = new UseFunctionService();
		useFunctionService.setFunctionService(functionService);
		return useFunctionService;
	}
}
